+2008-05-28 Kristian Rietveld <kris@imendio.com>
+
+ Bug 504087 - make gtk_tooltip_set_custom a no-op for setting the
+ current widget again.
+
+ * gtk/gtktooltip.c (gtk_tooltip_set_custom),
+ (gtk_tooltip_reset), (gtk_tooltip_run_requery): use a
+ custom_was_reset field to check if the custom widget is set again in
+ the query-tooltip callback; if not, we set it to NULL. Based on a
+ patch by Xavier Claessens, insightful comments from Jean-Yves Lefort
+ and Christian Persch.
+
2008-05-28 Michael Natterer <mitch@imendio.com>
* modules/printbackends/cups/gtkcupsutils.c
guint browse_mode_enabled : 1;
guint keyboard_mode_enabled : 1;
guint tip_area_set : 1;
+ guint custom_was_reset : 1;
};
struct _GtkTooltipClass
if (custom_widget)
g_return_if_fail (GTK_IS_WIDGET (custom_widget));
+ /* The custom widget has been updated from the query-tooltip
+ * callback, so we do not want to reset the custom widget later on.
+ */
+ tooltip->custom_was_reset = TRUE;
+
+ /* No need to do anything if the custom widget stays the same */
+ if (tooltip->custom_widget == custom_widget)
+ return;
+
if (tooltip->custom_widget)
{
GtkWidget *custom = tooltip->custom_widget;
{
gtk_tooltip_set_markup (tooltip, NULL);
gtk_tooltip_set_icon (tooltip, NULL);
- gtk_tooltip_set_custom (tooltip, NULL);
gtk_tooltip_set_tip_area (tooltip, NULL);
+
+ /* See if the custom widget is again set from the query-tooltip
+ * callback.
+ */
+ tooltip->custom_was_reset = FALSE;
}
static void
}
while (*widget);
+ /* If the custom widget was not reset in the query-tooltip
+ * callback, we clear it here.
+ */
+ if (!tooltip->custom_was_reset)
+ gtk_tooltip_set_custom (tooltip, NULL);
+
return return_value;
}